29. 视频: CASE 语句

11 CASE V2

CASE - 专家提示

  • CASE 语句始终位于 SELECT 条件中。

  1. CASE 必须包含以下几个部分:WHEN、THEN 和 END。ELSE 是可选组成部分,用来包含不符合上述任一 CASE 条件的情况。

  2. 你可以在 WHEN 和 THEN 之间使用任何条件运算符编写任何条件语句(例如 WHERE ),包括使用 AND 和 OR 连接多个条件语句。

  3. 你可以再次包含多个 WHEN 语句以及 ELSE 语句,以便处理任何未处理的条件。

示例

在第一节课的练习中,你看到了以下问题:

  1. 创建一列用于将 standard_amt_usd 除以 standard_qty ,以便计算每个订单的标准纸张的单价,将结果限制到前 10 个订单,并包含 id account_id 字段。 注意 - 如果你的答案正确,系统将显示一个错误,这是因为你除以了 0。当你在下个部分学习 CASE 语句时,你将了解如何让此查询不会报错。

我们来看看如何使用 CASE 语句来避免这一错误。

SELECT id, account_id, standard_amt_usd/standard_qty AS unit_price
FROM orders
LIMIT 10;

现在我们使用一个 CASE 语句,这样的话,一旦 standard_qty 为 0,我们将返回 0,否则返回 unit_price

SELECT id, account_id, CASE WHEN standard_qty = 0 OR standard_qty IS NULL THEN 0
                        ELSE standard_amt_usd/standard_qty END AS unit_price
FROM orders
LIMIT 10;

该语句的第一部分将捕获任何分母为 0 并导致错误的情况,其他部分将按照常规步骤相除。你将发现对于标准纸张,所有客户的单价是 4.99 美元。这样比较合理,不会波动,并且比在上节课中向分母上加 1 来暂时解决错误这一方法更准确。

你可以使用下面的数据自己尝试下。